const Egg = require('egg');
const archiver = require('archiver');
const fs = require('fs');
const path = require('path');

class DownloadController extends Egg.Controller {
    async downloadFiles() {

        const ctx = this.ctx;
        const filePaths = ctx.request.body; // 前端传入的文件地址数组
        const outputZip = path.join(__dirname, 'output.zip'); // 输出 ZIP 文件的路径

        const archivers = archiver('zip', { zlib: { level: 9 } }); // 设置压缩级别为最高
        const stream = fs.createWriteStream(outputZip); // 创建可写的文件流，准备写入 ZIP 文件

        return new Promise((resolve, reject) => {
            archivers.pipe(stream); // 将 archiver 的输出管道到文件流中
            archivers.bulk(filePaths.map(filePath => ({ expand: false, cwd: __dirname, src: filePath }))); // 将多个文件添加到 ZIP 文件中
            archivers.finalize(); // 完成压缩过程
            archivers.on('error', err => reject(err)); // 监听错误事件
            stream.on('close', () => resolve(outputZip)); // 监听关闭事件，表示压缩完成
        });
    }
}

module.exports = DownloadController;
